﻿<%@ Page Title="" Language="C#" MasterPageFile="~/Main.Master" AutoEventWireup="true" CodeBehind="MovimentoScarico.aspx.cs" Inherits="FimetContoDeposito.Operazioni.MovimentoScarico" %>

<%@ Register assembly="GrayParrot.Web.Controls" namespace="GrayParrot.Web.Controls" tagprefix="cc1" %>

<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">
    <asp:PlaceHolder ID="PlaceHolder1" runat="server">        
        <%: Scripts.Render("~/bundles/JQuery") %>          
        <%: Scripts.Render("~/bundles/JQueryUI") %>  
        <%: Styles.Render("~/bundles/Formly/css") %>
        <%: Scripts.Render("~/bundles/Formly") %>
		
        <%: Styles.Render("~/bundles/Datatables/css") %>
        <%: Scripts.Render("~/bundles/Datatables") %>
    </asp:PlaceHolder>

    <!-- Common -->
    <script type="text/javascript" lang="javascript" src="../Scripts/Formly/FormlyHelper.js"></script>
    <script type="text/javascript" lang="javascript" src="../Scripts/GrayParrot.Core.js"></script> 
    <script type="text/javascript" lang="javascript" src="../Scripts/GrayParrot.AngularJS.Directives.Fileupload.js"></script> 
    <script type="text/javascript" lang="javascript" src="../Scripts/GrayParrot.AngularJS.Directives.DateTimePicker.js"></script> 
    <script type="text/javascript" lang="javascript" src="../Scripts/GrayParrot.AngularJS.js"></script> 
    <script type="text/javascript" lang="javascript" src="../Scripts/GrayParrot.DataTables.js"></script> 
    <script type="text/javascript" lang="javascript" src="../Scripts/GrayParrot.Modals.js"></script>

    <script type="text/javascript" lang="javascript" src="../Scripts/GestioneDistinta.js"></script> 
    <script type="text/javascript" lang="javascript" src="../Scripts/GestioneDocumento.js"></script>
    <script type="text/javascript" lang="javascript" src="../Scripts/GestioneScarico.js"></script> 
    <script type="text/javascript" lang="javascript" src="../Scripts/GestioneCodiciXXXX.js"></script> 

    <script type="text/javascript" lang="javascript" src="../Scripts/jquery.blockUI.js"></script> 
    <script type="text/javascript" lang="javascript" src="../Scripts/bootbox.min.js"></script> 

    <script type="text/javascript" lang="javascript" src="../Scripts/FCD.js"></script> 
    <!-- Common -->
</asp:Content>

<asp:Content ID="ContentSH" ContentPlaceHolderID="specialHead" runat="server">
    <link type="text/css" rel="stylesheet" href="../Styles/MovimentoScarico.css" />
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">
    <!-- 
        Sitemap Menu item:
        <siteMapNode url="~/MovimentoScarico.aspx" title="MovimentoScarico" description="MovimentoScarico" image="fa-laptop" id="MovimentoScarico"/>
    -->
    <section class="panel">
	    <header class="panel-heading">
			<b>Scarico Magazzino</b>
		</header>

        <iframe id='iframeCrud' frameborder="0" style="width:700px; height:600px; display:none"></iframe>
        <div id="crudDialog" title="" style="display:none"></div>

		<div class="panel-body">

            <!-- PUT YOUR CONTENT HERE -->
            <div class="row" ng-app="formlyExample" ng-controller="MainCtrl as vm" name="divContainer" id="divContainer">
			   <div class="col-md-6">
                    <div class="row">
                        <div ng-if="vm.loadingData.$$state.status === 0" style="margin:20px 0;font-size:2em">
                            <strong>Caricamento...</strong>
                        </div>
                        <div ng-if="vm.loadingData.$$status.state !== 0">
                            <form ng-submit="vm.onSubmit()" novalidate id="formlyForm">
                                <formly-form model="vm.model" fields="vm.fields" form="vm.form">
                                    <button type="sumbit" class="btn btn-primary submit-button" ng-disabled="vm.form.$invalid">Aggiungi</button>
                                </formly-form>
                            </form>
                            <%--<pre>{{vm.model | json}}</pre>--%>
                        </div>
                    </div>
                    <div class="row">
                        <img id="foto" class="img-thumbnail" ng-src="data:{{ vm.model.FotoProdotto.filetype }};base64,{{ vm.model.FotoProdotto.base64 }}" alt="Formly!" ng-show="vm.model.FotoProdotto" style="width:auto;height:auto;max-width:350px;max-height:100px" />
                        <img id="fotoDefault" class="img-thumbnail" src="http://placehold.it/350x150/7ba9d0/fff?text=Immagine+articolo+%3A%29" ng-hide="vm.model.FotoProdotto" style="width:auto;height:auto;max-width:350px;max-height:100px" />
                    </div>
                </div>
                <div class="col-md-6">
                    <div class="row">
                        <cc1:JQDataTable ID="JQDTTable" runat="server" 
                                SelectionMode="Single" 
                                RenderScripts="false" 
                                BootstrapClasses="table table-hover table-bordered table-condensed">
                            <FeaturesConfig>
                                <Features>
                                    <cc1:Searching Value="none" />
                                    <cc1:AutoWitdh Value="true" />
                                    <cc1:ScrollY Value="500" ScrollCollapse="true" />
                                    <cc1:ScrollX Value="400" />
                                    <cc1:LengthChange Value="false" />
                                    <cc1:Paging PagingType="FullNumbers" PageLength="15" />
                                </Features>
                            </FeaturesConfig>
                            <ControllerConfig Url="" LoadingMode="Manual" />
                            <ColumnsConfig Key="Id">
                                <Columns>
                                    <cc1:TextColumn Name="Id" Header="Id" visible="false" />
                                    <cc1:TextColumn Name="A1Position" Header="Position" visible="false" />
                                    <cc1:TextColumn Name="IdArticolo" Header="IdArticolo" visible="false" />
                                    <cc1:TextColumn Name="CodiceArticolo" Header="Cod. Articolo" Width="100" />
                                    <cc1:TextColumn Name="CodiceFornitore" Header="Cod. Forn." Width="100" />
                                    <cc1:TextColumn Name="UMQta" Header="U.M.Grz." Width="60" />
                                    <cc1:NumericColumn Name="Quantita" Header="Q.ta Grz." Width="80" />
                                    <cc1:TextColumn Name="DescrFornitore" Header="Fornitore" Width="150" />
                                    <cc1:TextColumn Name="DescrizioneArticolo" Header="Descr. Articolo" Width="200"/>                             
                                    <cc1:TextColumn Name="Note" Header="Note Articolo" Width="200" />
                                    <cc1:TextColumn Name="RifDocCarico" Header="Rif. Doc. Carico" Width="350" />
                                    <cc1:TextColumn Name="Stato" Header="Stato" Width="100" />
                                    <cc1:ActionColumn Header="Azioni">
                                        <Actions>
                                            <cc1:ActionIcon Icon="fa fa-search" Callback="ShowImage" />
                                            <cc1:ActionIcon Icon="fa fa-trash-o" Callback="CancellaArticolo" />
                                        </Actions>
                                    </cc1:ActionColumn>
                                </Columns>
                            </ColumnsConfig>
                            <Toolbar>
                                <cc1:IconButton Icon="fa fa-trash-o" Callback="CancellaTuttiArticoli" />
                                <cc1:IconButton Icon="fa fa-print" Callback="Stampa" />
                            </Toolbar>
                        </cc1:JQDataTable>
                    </div>
                </div>
             </div>
		</div>

        <div class="form-content" style="display:none;" id="formChangeCodiceFornitore">
          <form class="form" role="form">
            <div class="form-group">
              <p id="lbl1">L'articolo {} ha assegnato il codice fornitore {}</p>
              <p id="lbl2">Per sostituirlo, seleziona il nuovo codice tra quelli assegnabili disponibili e premi <b>Salva</b></p>
              <p id="lbl3">Se invece, vuoi eliminare l'associazione al codice fornitore esistente, premi <b>Elimina Associazione</b></p>
            </div>
            <div class="form-group">
              <label for="elencoCodici">Codici disponibili</label>
              <select class="form-control codiciDisponibili" id="elencoCodici" name="elencoCodici"></select>
            </div>
          </form>
        </div>
	</section>

</asp:Content>

<asp:Content ID="Content3" ContentPlaceHolderID="LocaJavascript" runat="server">
     <% HttpContext.Current.Response.Write(this.JQDTTable.RenderScriptsManually()); %>

<script type="text/javascript">  
    $(document).ready(function () {
        m_tableJQDTTable.order([1, 'asc']).draw();

        $.blockUI.defaults.message = 'Cancellazione in corso...';
        $(document).ajaxStart($.blockUI).ajaxStop($.unblockUI);
    });

    var deMoment = moment();
    deMoment.lang('it')

    var idToEdit = GetQueryStringParams("Id");

    var m_rowPosition = 1;
    var m_id_movimento_scarico = null;
    var m_dialog = null;
    var settings = new FormlySettings();
    settings.container = '#divContainer';
    settings.shortcutCallback = DoSubmit;
    

    if (idToEdit == undefined) {
        settings.setLoad(settings.createGetConfig('/api/Movimenti/LoadFieldsMovimentoScarico'));
    } else {
        settings.setLoad(settings.createGetConfig('/api/Movimenti/LoadFieldsMovimentoScarico', { id: idToEdit }));
        m_id_movimento_scarico = idToEdit;
        LoadEditMovimenti(idToEdit, LoadEditmovimentiCallback);
    }

    FormlyManager(settings);

    function dialogClose() {
        $("#iframeCrud").contents().remove();
        $('#crudDialog').hide();

        $("#crudDialog").dialog("close");
    }

    /* cambio di magazzino */
    function CambiaMagazzino() {
        var m_rows = m_tableJQDTTable.data();

        if (m_rows.length > 0) {
            bootbox.confirm({
                title: "Cambio Magazzino",
                message: 'Il cambio di magazzino richiede la cancellazione di tutti movimenti di scarico effettuati finora.\nVuoi procedere ?',
                buttons: {
                    cancel: {
                        label: '<i class="fa fa-times"></i> No'
                    },
                    confirm: {
                        label: '<i class="fa fa-check"></i> Si'
                    }
                },
                callback: function (result) {
                    if (result) {
                        var form = extScope.vm.form;
                        form.$setPristine();
                        form.$setUntouched();

                        var model = extScope.vm.model;
                        model.DataMovimento = new Date();
                        model.TipoDocumento = null;
                        model.NumeroDocumento = null;
                        model.DataDocumento = new Date();
                        model.Colore = null;
                        model.RiferimentoCliente = null;
                        model.DataConsegna = null;

                        extScope.vm.model = angular.copy(model);

                        AzzeraDati();
                        CancellaTuttiArticoli();
                        Empty(m_tableJQDTTable);
                    }
                }
            });
        }


    }
    /* cambio di magazzino */

    function LoadCodiciArticoli(magazzino, codice) {
        var url = '/api/AnagraficaArticoli/LoadCodiciArticoli';

        var parameters = [];
        parameters.push(magazzino);
        var m_data = JSON.stringify({ parameters: parameters });

        $.ajax({
            global: false,
            type: "POST",
            url: url,
            data: m_data,
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {

                var m_idCodiceXXXX = '';

                //var element = extScope.vm.form.;
                var elems = extScope.vm.fields[2].fieldGroup[0].templateOptions.options;
                elems = [];

                $('#formly_1_asyncselect_Articolo_0').empty();
                $.each(response, function (index, obj) {
                    if (obj.name.toUpperCase() == codice.toUpperCase()) {
                        m_idCodiceXXXX = obj.value;
                    }

                    var item = { name: obj.name, value: obj.value };
                    elems.push(item);
                });

                extScope.vm.fields[2].fieldGroup[0].templateOptions.options = elems;
                extScope.vm.form.$setPristine();
                extScope.vm.model.Articolo = m_idCodiceXXXX;

                CambiaFoto(m_idCodiceXXXX, extScope);
            },
            failure: function (response) {
                alert(response);
            }
        });
    }

    function LoadEditmovimentiCallback(response) {
        m_rowPosition = 1;
        $.each(response, function (index, value) {
            var m_caricoItem = new Object();
            m_caricoItem.A1Position = m_rowPosition;
            m_caricoItem.Id = value.IdMovimento;
            m_caricoItem.IdArticolo = value.IdArticolo;
            m_caricoItem.CodiceArticolo = value.CodiceArticolo;
            m_caricoItem.DescrizioneArticolo = value.CodiceArticolo;
            m_caricoItem.IdCodiceFornitore = value.IdFornitore;
            //m_caricoItem.DescrFornitore = $('#formly_1_asyncselect_Fornitore_3 option:selected').text();
            m_caricoItem.CodiceFornitore = value.CodiceFornitore;
            m_caricoItem.UMQta = value.UMGrz;
            m_caricoItem.Quantita = value.QtaGrz;
            m_caricoItem.UMQtaFatt = value.UMFatt;
            m_caricoItem.QtaFatt = value.QtaFatt;
            m_caricoItem.Note = value.Note;
            m_caricoItem.Fornitore = value.Fornitore;
            m_caricoItem.RifDocCarico = value.RifDocCarico;

            m_tableJQDTTable.row.add(m_caricoItem).draw();

            m_rowPosition++;
        });
    }

    /* */
    function AzzeraDatiDocumento() {
        var model = extScope.vm.model;

        model.DataMovimento = new Date();
        model.Customer = null;
        model.RiferimentoCliente = null;
        model.DataConsegna = null;
        model.TipoDocumento = null;
        model.NumeroDocumento = null;
        model.DataDocumento = new Date();
        model.Colore = null;
        model.CodiceFornitore = null;
        model.Fornitore = null;

        extScope.vm.model = angular.copy(model);
    }

    function AzzeraDati() {
        var model = extScope.vm.model;

        model.Articolo = null;
        model.CodiceFornitore = null;
        model.Fornitore = null;
        model.Descrizione = null;
        model.Tipologia = null;
        model.SerieFamiglia = null;
        model.Dimensioni = null;
        model.NoteArticolo = null;
        model.Note = null;
        model.TotGiacenza = null;
        model.Impegnata = null;
        model.Disponibile = null;
        model.QtaFatt = null;
        model.Quantita = null;
        model.QuantitaPacco = null;
        model.NoteDistinta = null;

        extScope.vm.form.$setPristine();
        extScope.vm.form.$setUntouched();

        $('#formly_1_asyncselect_CodiceFornitore_1').prop('disabled', false);
        //$('#formly_1_grayParrotDateTimePicker_DataConsegna_2').val(null);

        setTimeout(function () { $("#formly_1_asyncselect_Articolo_0").trigger("change"); }, 0, false);
        
        $(".img-thumbnail").attr("src", "http://placehold.it/350x150/7ba9d0/fff?text=Immagine+articolo+%3A%29");
    }

    /* callback chiamata dal pulsante di clear del codice fornitore... */
    function CancellaCodiceFornitore() {
        $('#formly_1_asyncselect_Articolo_0').val('string:00000000-0000-0000-0000-000000000000');
        $('#formly_1_asyncselect_CodiceFornitore_1').val('');
        $('#formly_1_asyncselect_CodiceFornitore_1').prop('disabled', false);
    }

    /* callback chiamata dal change del campo codice fornitore... */
    function TrovaArticolo(options, scope) {
        if (options == null) {
            return;
        }

        var model = extScope.vm.model;

        var url = "/api/AnagraficaArticoli/GetArticoloByCodiceFornitore";

        $.ajax({
            global: false,
            type: "POST",
            url: url,
            data: JSON.stringify({ id: options }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                var model = extScope.vm.model;

                if ((response != null) && (response !== undefined)) {
                    model.Articolo = response;
                                     
                    extScope.vm.form.formly_1_asyncselect_Articolo_0.$viewValue = response;
                    extScope.vm.form.formly_1_asyncselect_Articolo_0.$render();

                    $("#formly_1_asyncselect_Articolo_0").trigger("change");
                } else {
                    /* creazione codice XXXX */
                    var m_codiceXXXX = GetCodiceXXXX();
                }

                extScope.$apply();
            },
            failure: function (response) {
                alert(response);
            }
        });
    }

    /* callback dell'evento change del campo Articolo... */
    function CambiaFoto(options, scope) {
        var url = "/api/AnagraficaArticoli/GetDettaglio";

        if (options === undefined) {
            return;
        }

        $.ajax({
            global: false,
            type: "POST",
            url: url,
            data: JSON.stringify({ id: options }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                var model = extScope.vm.model;

                if (response != null) {
                    $(".img-thumbnail").attr("src", response.FotoArticolo);
                    $('.quantitaAOR').text(response.DescrUnitaDiMisura);
                    $('.qtaFattAOR').text(response.DescrUMFatt);

                    model.Descrizione = response.Descrizione;
                    model.Tipologia = response.DescrTipologia;
                    model.SerieFamiglia = response.SerieFamiglia;
                    model.Dimensioni = response.Dimensioni;
                    model.NoteArticolo = response.Note;
                    model.QuantitaPacco = response.QtaPacco;
                    
                    if (response.Fornitore == null) {
                        model.Fornitore = "  ";

                        //$('#formly_1_asyncselect_CodiceFornitore_1').prop('disabled', false);
                    } else {

                        model.Fornitore = response.Fornitore;

                        if ((response.CodiceFornitore !== undefined) && (response.CodiceFornitore != null)) {
                            model.CodiceFornitore = response.CodiceFornitore;
                        } else {
                            model.CodiceFornitore = "  ";
                        }

                        $('#formly_1_asyncselect_CodiceFornitore_1').prop('disabled', false);
                        if (response.CodiceFornitore != null) {
                            $('#formly_1_asyncselect_CodiceFornitore_1').prop('disabled', true);
                        }
                    }

                    $('#formly_1_inputnumber_Quantita_2').text('');
                    $('#formly_1_inputnumber_QtaFatt_3').text('');
                    $('#formly_1_inputnumber_Quantita_2').val('');
                    $('#formly_1_inputnumber_QtaFatt_3').val('');

                    CalcolaQuantitaScarico(options, scope);
                } else {
                    model = null;
                    $('#formly_1_asyncselect_CodiceFornitore_1').prop('disabled', false);

                    AzzeraDati();
                }

                setTimeout(function () { extScope.$apply(); }, 0, false);
            },
            failure: function (response) {
                alert(response);
            }
        });
    }

    function DoSubmit() {
        var model = extScope.vm.model;

        if (model.Articolo == '00000000-0000-0000-0000-000000000000') {
            alert('Seleziona articolo...');
            return;
        }

        if ((model.Quantita == 0) || (model.Quantita == null) || (model.Quantita === undefined)) {
            alert('Indicare la quantità...');
            return;
        }

        /* check scarico possibile */
        if (model.Quantita > model.Disponibile) {
            bootbox.alert({
                title: "Check Quantità",
                message: "Quantità disponibile insufficiente per evadere l'ordine di scarico.<br\>Inserire una quantità inferiore o verificare la quantità impegnata..."
            });
            return;
        }

        // scrivo il movimento di scarico nel db...
        if (m_id_movimento_scarico == null) {
            Salva_Dati_Documento_Scarico(model);
        } else {
            Salva_Elemento_Scarico(m_id_movimento_scarico, model);
        }
    }

    function CancellaArticolo(obj) {
        var p = obj.Id;

        var item = null;
        var m_rowIndex = 0;
        var data = m_tableJQDTTable.rows().data();

        m_rowIndex = m_tableJQDTTable.row('#' + p + '').index()
        
        m_rowIndex = m_tableJQDTTable.row('#' + p + '').index()

        if (data.length == 1) {

            bootbox.confirm({
                title: "Cancella Elemento",
                message: "Il movimento di scarico è l\'unico presente in distinta: Se si procede sarà cancellata l\'intera distinta.",
                buttons: {
                    cancel: {
                        label: '<i class="fa fa-times"></i> Annulla'
                    },
                    confirm: {
                        label: '<i class="fa fa-check"></i> Procedi'
                    }
                },
                callback: function (result) {
                    if (result) {

                        Cancella_Elemento_Scarico(m_id_movimento_scarico, obj, m_rowIndex, 0);

                        Cancella_Dati_Documento_Movimento(m_id_movimento_scarico);

                        m_id_movimento_scarico = null;

                        AzzeraDati();
                        AzzeraDatiDocumento();
                    }
                }
            });

        } else {
            Cancella_Elemento_Scarico(m_id_movimento_scarico, obj, m_rowIndex, 1);
        }
    }

    function CancellaTuttiArticoli() {
        m_tableJQDTTable.clear().draw();

        // chiama il metodo per cancellare tutti gli articoli di una lista di scarico
        Cancella_Elementi_Scarico(m_id_movimento_scarico);
    }

    /* elaborazione campi calcolati */
    function CalcolaQuantitaScarico(options, scope) {
        var url = "/api/Magazzino/CalcolaQuantitaArticolo";

        $.ajax({
            global: false,
            type: "POST",
            url: url,
            data: JSON.stringify({ id: options }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                var model = extScope.vm.model;

                model.TotGiacenza = response.Totale_Giacenza;
                model.Impegnata = response.Impegnata;
                model.Disponibile = response.Disponibile;

                setTimeout(function () { extScope.$apply(); }, 0, false);
            },
            failure: function (response) {
                alert(response);
            }
        });
    }

    function CalcolaGiacenza(options, scope) {
        var url = "/api/Magazzino/CalcolaGiacenza";

        $.ajax({
            global: false,
            type: "POST",
            url: url,
            data: JSON.stringify({ id: options }),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            success: function (response) {
                $("#giacenzaDisponibileArticolo").text(response);
            },
            failure: function (response) {
                alert(response);
            }
        });
    }

    function Stampa() {
        if ((m_id_movimento_scarico == null) || (m_id_movimento_scarico === undefined)) {
            alert('Nessun movimento di scarico presente...');
            return;
        }

        var url = '/OperationReports/ReportTest.aspx?id=' + m_id_movimento_scarico + "&t=1";

        $("#iframeCrud").prop('src', url).appendTo("#crudDialog");
        $("#iframeCrud").width(1000);
        $("#iframeCrud").height(700);
        $("#iframeCrud").show();

        m_dialog = $("#crudDialog").dialog({
            title: 'Movimento di Scarico',
            width: 'auto',
            height: 'auto',
            modal: true,
            close: function (response) {
                $("#iframeCrud").contents().remove();
                $('#iframeCrud').hide();
            }
        });
    }

    function CambiaQuantita(options, scope) {
        var m_codiceArticolo = $('#formly_1_asyncselect_Articolo_0 option:selected').text();

        if (m_codiceArticolo.indexOf('XXXX') != -1) {
            var model = extScope.vm.model;
            model.TotGiacenza = options;
            extScope.$apply();
        }
    }
    /* elaborazione campi calcolati */
</script>
</asp:Content>